#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
#include <sys/timerfd.h>

int main()
{
    // int timerfd_create(int clockid, int flags);
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0); // 创建定时器
    if (timerfd < 0)
    {
        perror("timerfd_create error");
        return -1;
    }

    //    struct timespec
    //    {
    //          time_t tv_sec; /* Seconds */
    //          long tv_nsec;  /* Nanoseconds */
    //    };
    //    struct itimerspec
    //    {
    //          struct timespec it_interval; /* Interval for periodic timer */
    //           struct timespec it_value;    /* Initial expiration */
    //    };
    struct itimerspec itime;
    // 设置第一次超时时间
    itime.it_value.tv_sec = 2;
    itime.it_value.tv_nsec = 0;
    // 设置间隔超时时间
    itime.it_interval.tv_sec = 2;
    itime.it_interval.tv_nsec = 0;

    // int timerfd_settime(int fd, int flags,const struct itimerspec *new_value,struct itimerspec *old_value);
    timerfd_settime(timerfd, 0, &itime, NULL); // 启动定时器

    while (true)
    {
        uint64_t times;
        int ret = read(timerfd, &times, 8);
        if (ret < 0)
        {
            perror("read error");
            return -1;
        }
        printf("超时了,距离上一次读取超时了%ld次\n", times);
    }
    close(timerfd);
    return 0;
}